{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# bagging和随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.datasets import load_wine\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "所有特征：['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']\n"
     ]
    }
   ],
   "source": [
    "wine = load_wine()#使用葡萄酒数据集\n",
    "print(f\"所有特征：{wine.feature_names}\")\n",
    "X = pd.DataFrame(wine.data, columns=wine.feature_names)\n",
    "y = pd.Series(wine.target)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "决策树的准确率：0.694\n"
     ]
    }
   ],
   "source": [
    "#构建并训练决策树分类器，这里特征选择标准使用基尼指数，树的最大深度为1\n",
    "base_model = DecisionTreeClassifier(max_depth=1, criterion='gini',random_state=1).fit(X_train, y_train)\n",
    "y_pred = base_model.predict(X_test)#对训练集进行预测\n",
    "print(f\"决策树的准确率：{accuracy_score(y_test,y_pred):.3f}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## bagging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "BaggingClassifier的准确率：0.917\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import BaggingClassifier\n",
    "# 建立AdaBoost分类器，每个基本分类模型为前面训练的决策树模型，最大的弱学习器的个数为50\n",
    "model = BaggingClassifier(base_estimator=base_model,\n",
    "                            n_estimators=50,\n",
    "                            random_state=1)\n",
    "model.fit(X_train, y_train)# 训练\n",
    "y_pred = model.predict(X_test)# 预测\n",
    "print(f\"BaggingClassifier的准确率：{accuracy_score(y_test,y_pred):.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试估计器个数的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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9957z+yHcmhoKABg69ateP755/Hjjz/i//7v//Dqq69iw4YNmDdvXrPilEgkkEqlJnECMOnINh4zJrK//e1vOHDgAN555x307t0b3t7eeOGFF1BaWtqse1silUrh4eFhcmzWrFm499578cMPP+DQoUO477778PDDD+Pf//63Xe5JbEPzREirFhMTgwsXLqBnz56N/vPx8UHnzp0RGhqKH3/80eI15HI5amtrm7xXv379cPToUZNjR44cgaenJyIjI1tcFrGCgoIQFhaGy5cvmy13ww/X/v37Y+nSpfj+++8xZ84cfPTRRwDqE5iYctvi6NGjmDZtGh577DEMHDgQERERyMjIMDnH3Over18/pKeno7CwUDh2+/ZtXL58Gf3792/yvl26dMGsWbOwa9cubNu2DZ9++ik0Go19CkVsQkmEOIRWq0VeXl6j/1gzt695/fXXceDAASxduhRpaWm4evUqfvjhB8yZMwdVVVUAgJUrV2LLli345z//iYsXL+LChQvYsGGD8EHVo0cPnD59GlevXkVhYSF0Op3Zey1fvhz79+/H2rVrkZGRgb1792LVqlV44YUXGtUqHG316tV4//33sXr1apw/fx6XL1/Gl19+KdQyMjMz8dJLL+Gnn37CjRs3cOLECRw7dgx9+/YFAKhUKvj4+ODHH39EXl4eiouL7Rpf7969ceDAAZw8eRLp6el4+umnkZOTY3KOudf9iSeeQKdOnTBlyhScOXMGp0+fxtSpU9G1a9dGTYl3WrhwIb777jtcvXoVFy5cwH//+1+EhYXB19fXrmUjzUNJhDjEsWPH0KVLl0b/FRUVNes68fHxOHjwIM6dO4fRo0djwIABWLJkCXx9fYXmlrlz52Lnzp3Yt28fBg0ahLi4OHz//ffCzOwXXngBKpUKAwcORKdOnXD8+HGz95owYQK2b9+OTz75BP3798eSJUswf/58rFy5smUvhg2mT5+OvXv34ptvvsHw4cMxbNgwrFq1Cl27dgUAeHt748qVK5g6dSqioqLw6KOPIjY2Vug7kkgk2LhxI/bu3YvQ0FAMHjzYrvG9++67CA8PR3x8PBISEtC1a1dMmjTJ5Bxzr7unpyd+/PFHuLu7Iy4uDmPGjIG3tzd++OGHJhM1YwyLFy9G//79ERcXh4qKCnz//fdCUxtxDY4196shIYQQUodqIoQQQmxGSYQQ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = list(range(2, 102, 2))# 估计器个数即n_estimators，在这里我们取[2,102]的偶数\n",
    "y = []\n",
    "\n",
    "for i in x:\n",
    "    model = BaggingClassifier(base_estimator=base_model,\n",
    "                              n_estimators=i,\n",
    "                              \n",
    "                              random_state=1)\n",
    "  \n",
    "    model.fit(X_train, y_train)\n",
    "    model_test_sc = accuracy_score(y_test, model.predict(X_test))\n",
    "    y.append(model_test_sc)\n",
    "\n",
    "plt.style.use('ggplot')\n",
    "plt.title(\"Effect of n_estimators\", pad=20)\n",
    "plt.xlabel(\"Number of base estimators\")\n",
    "plt.ylabel(\"Test accuracy of BaggingClassifier\")\n",
    "plt.plot(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RandomForestClassifier的准确率：0.972\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "model = RandomForestClassifier(\n",
    "                            n_estimators=50,\n",
    "                            random_state=1)\n",
    "model.fit(X_train, y_train)# 训练\n",
    "y_pred = model.predict(X_test)# 预测\n",
    "print(f\"RandomForestClassifier的准确率：{accuracy_score(y_test,y_pred):.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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sGXLFrz55pvYv38//ve//+H9999HTEwMXn/99QbFKRaLIZFIjOIEYNShXLWtKmG98847+OGHH/Dpp5+ia9eucHJywttvv427d+82qOzaSCQS2NvbG2179dVX8eyzz+K3337DgQMH8Pe//x0jRozAV199ZZIyyaOh5yxIkxAUFIT09HR06tSp2j9nZ2d4enrCx8cH+/fvr/Uctra2qKioqLesHj164NChQ0bbkpOT4eDgAH9//8eui1BeXl5o164drly5UmO9H/wS7dmzJ+bOnYt9+/Zh6tSp+OKLLwD8laiE1PtRHDp0COPHj8eYMWPQu3dvdOzYERkZGUbH1PS59+jRAxcvXoRSqeS33b59G1euXEHPnj3rLbd169Z49dVXsX37dsTGxuI///kPiouLTVMp8kgoWZDHotPpkJ+fX+0fa+AyKR988AF++OEHzJ07F6mpqcjOzsZvv/2GqVOnory8HACwZMkSbN68Gf/+979x6dIlpKenIyYmhv9C6tChA06fPo3s7GwolUro9foay1qwYAH27NmDFStWICMjA7t378bSpUvx9ttvV2slmNuyZcvw+eefY9myZUhLS8OVK1fw/fff862GrKwsvPvuuzhy5Ahu3LiBY8eO4fDhw+jevTsAQKFQwNnZGfv370d+fj6KiopMGl/Xrl3xww8/4MSJE7h48SL++c9/Ijc31+iYmj73l19+GR4eHhg7dizOnDmD06dPY9y4cWjbtm21W4APmzVrFn799VdkZ2cjPT0d3333Hdq1awcXFxeT1o00DCUL8lgOHz6M1q1bV/unUqkadJ7w8HAkJSXh/PnzGDx4MHr16oU5c+bAxcWFv00ybdo0bN26Fd9++y369OmD0NBQ7Nu3j39S+e2334ZCoUDv3r3h4eGBo0eP1lhWVFQU4uLisG3bNvTs2RNz5szBjBkzsGTJksf7MB7BhAkTsHv3bvz888948skn0b9/fyxduhRt27YFADg5OSEzMxPjxo1Dly5d8OKLLyIkJITv2xGLxVi/fj12794NHx8f9O3b16TxrVmzBr6+vggPD0dERATatm2LUaNGGR1T0+fu4OCA/fv3w87ODqGhoRgyZAicnJzw22+/1ZuQGWN466230LNnT4SGhuLevXvYt28ff4uMWIaINfQnICGEEKtDLQtCCCH1omRBiJkcPnwYzs7Otf47fPiw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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = list(range(2, 102, 2))# 估计器个数即n_estimators，在这里我们取[2,102]的偶数\n",
    "y = []\n",
    "\n",
    "for i in x:\n",
    "    model = RandomForestClassifier(\n",
    "                              n_estimators=i,\n",
    "                              \n",
    "                              random_state=1)\n",
    "  \n",
    "    model.fit(X_train, y_train)\n",
    "    model_test_sc = accuracy_score(y_test, model.predict(X_test))\n",
    "    y.append(model_test_sc)\n",
    "\n",
    "plt.style.use('ggplot')\n",
    "plt.title(\"Effect of n_estimators\", pad=20)\n",
    "plt.xlabel(\"Number of base estimators\")\n",
    "plt.ylabel(\"Test accuracy of RandomForestClassifier\")\n",
    "plt.plot(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "d5688316ac304e130f8d317c2d70f320b84a387d628644b2276130309c15ce54"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
